// 题 1：首字母改大写
//编写函数 firstLetterToUpperCase,输入'hello',输出 'Hello';输入'World', 输出'World';输入 345,输出 345;
function firstLetterToUpperCase(str) {
    var a = str.charAt(0).toUpperCase() + str.substr(1);
    return a;
}
console.log(firstLetterToUpperCase('hello'));

// 题 2：去字符串头尾空格
// 编写函数 trim,满足输入 ' abc   ',输出 'abc'输入 ' a bc   ',输出 'a bc'
function trim(str) {
  var b = str.replace(/(^\s*)|(\s*$)/g, '');
  // b = str.replace(/^\s+/g,'').replace(/\s+$/g,'');
  return b;
}
console.log(trim(' a bc   '));
// 题 3：将字符串中 _ 后面的小写字母变大写，并且删除 _
// 满足输入'abc_bcd', // 输出 'abcBcd';输入'a_3_c_d_ef';  // 输出 'a3CDEf';输入'_a_b_c_d_ef';  // 输出 '_aBCDEf'
function foo(str) {
    let arr = str.split("");
    for (var i=1;i<arr.length-1;i++){
        if (arr[i]==='_'){
            arr[i+1] = arr[i+1].toUpperCase();
            arr.splice(i,1)
        }
    }
    console.log(arr.join(""));
}
foo('_a_b_c_d_ef_');
// 题 4：删除字符串中所有的数字
// 满足输入'a23b434c45',输出 'abc';输入'343abd8c',输出 'abdc';
function num(str) {
  var d = str.replace(/\d/g,'');
  return d;
}
console.log(num('a23b434c45'));

// 题 5: 反转字符串
// 满足输入'abcd',输出 'dcba';输入'a',输出 'a'
function reverse(str) {
  var e = [];
  var arr = str.split('');
  for(var index = arr.length-1;index>= 0;index--){
    e.push(arr[index]);
  }
  e = e.join('');
  return e;
}
console.log(reverse('abcd'));
//题 6: 统计字符串中各字符在字符串中出现的数量
// 满足输入'abcd',输出 a:1,b:1,c:1,d:1
function number(str) {
 var f = {};
 var array = str.split('');
 array.forEach(function (currentValue) {
    f[currentValue] = f[currentValue] ? f[currentValue] + 1 : 1;
 });
  return f;
}
console.log(number('abcd'));
// 题目1
//    写一个addSpace函数，传入一个string类型的参数，然互将string的每个字符间隔一个空格返回；
var str = "abcde";
function addSpace(str) {
   return str.split("").join(" ");
}

console.log(addSpace('abcde'));
//题目2
//    为了保证页面传输安全，我们经常要对一些特殊字符进行转义，请写一个函数escapeHtml函数，将">""<""&"进行转义；
function escapeHtml(str) {
   return str.replace(/[><&]/g,function (match) {
    switch (match) {
        case '>':
            return "&gt";
        case '<':
            return "&lt";
        case '&':
            return "&amp";
    }
   });
}
console.log(escapeHtml('>'));
//题目3
//    重复输出一个给定的字符串str(第一个参数) n(第二个参数) 次，如果第二个参数不是正数的时候返回空字符串；
function repeat(str,n) {
    var repeat = "";
    while(n>0){
        repeat += str;
        n--;
    }
    return repeat;
}
console.log(repeat("abc", 3));
//题目4
//    有这样一个url：http://item.taobao.com/item.html?a=1&b=2&c=&d=xxx&e,请写一个函数提取url中的各个GET参数（参数名和参数个数不确定），
//    将其按key-value形式返回到一个新对象中。如{a:"1",b:"2",c:"",d:"xxx",e:undefined}
var url = "http://item.taobao.com/item.html?a=1&b=2&c=&d=xxx&e";
var paramstr = url.substring(url.indexOf("?")+1); //a以后包括a
var pms = paramstr.split("&"); //["a=1", "b=2", "c=", "d=xxx", "e"]
var obj = {};
for(var i=0;i<pms.length;i++){
    if(pms[i].indexOf("=") < 0){
        obj[pms[i]] = undefined;
    }else{
        var pa = pms[i].split("=");
        obj[pa[0]] = pa[1];
    }
}
console.log(obj);
//题目5
//    输入两个字符串，从第一个字符串中删除第二个字符串中所有字符(不能使用replace)；
var a = "abcdefgabcdefgabcefgabdefg";
var b = "cd";
for(var i = 0;i<b.length;i++){
   a = a.split(b[i]).join("");
}
console.log(a);
// 题目6
//    编写一个函数maxLetter返回一个数组出现最多的字符及其个数。
function maxLetter(arr) {
    arr = arr.join().replace(/,/g, '');
    let res = {};
    let charArr = arr.split('');
    charArr.forEach(function (num) {
        res[num] = res[num] ? res[num] + 1 : 1;
    });
    console.log(res);
}
maxLetter(["hello,world"]);
//题 1：查找数组对象中 age 大于 18 对象
function filterAdult(arr) {
  return arr.filter(function (item) {
     return(item.age > 18);
  });
}
console.log(filterAdult([
    {age: 19, name:'Jack'},
    {age: 5, name:'Apple'},
    {age: 12, name:'Lynn'},
    {age: 25, name:'David'}
]));
//题 2：判断数组中是否所有的数字都大于 0
function isAllNumPosive(arr) {
  return arr.every(function (item) {
      if(typeof item === "number"){
          return(item > 0);
      }else{
          return true;
      }
  });
}
console.log(isAllNumPosive([1, 2, 3, 4]));  // 输出 true
console.log(isAllNumPosive([1, 2, 3, 4, -1]));  // 输出 false
console.log(isAllNumPosive([1, 2, 3, 4, 'a', {a: 3}]));  // 输出 true
//题 3：改变传入的数组，将数组中第 n(从 0 开始算 ) 个元素放到数组的开头
// 编写函数 putFirst,满足
var arr = [1, 2, 3, 4];
function putFirst(arr,index) {
 var item = arr.splice(index,1);
 arr.unshift(item[0]);
 return arr;
}
console.log(putFirst(arr, 2));// 此时 arr为 [3, 1, 2, 4]
// 题 4: 将 arguments 对象转换成数组
function toArray(obj) {
   var array = [];
   for(i in obj){
       array.push(obj[i]);
   }
   return array;
}
(function () {
    var arr = toArray(arguments);
    console.log(Array.isArray(arr));// 输出 ture
})(1, 2);

// 题 5：将数组中数字内容求和
function sum(arr) {
   var sum = 0;
   for(i in arr){
       if(typeof arr[i] === 'number'){
           sum+=arr[i];
       }
   }
   return sum;
}
console.log(sum([1, 2, 3, 4])); // 输出 10
console.log(sum(['a', 1, 2, {a: 3}, 3, 4, 1.2]));  // 输出 11.2
// 题 6: 将数组元素按 age 字段的值，从小到大排序
function sortAge(arr) {
  return arr.sort(function (v1,v2) {
    if(v1.age<v2.age){
        return -1;
    } else{
        return 1;
    }
  });
}
console.log(sortAge([
    {age: 19, name: 'Jack'},
    {age: 5, name: 'Apple'},
    {age: 12, name: 'Lynn'},
    {age: 25, name: 'David'}
]));
// 题 7: 将数组元素去重,其中数组元素均为基本类性
function uniq(arr) {
  var newArr = [];
  var isUniq = true;
  for(i in arr){
      for(j in newArr){
          if(arr[i] === newArr[j]){
              isUniq = false;
          }
      }
      if(isUniq){
          newArr.push(arr[i]);
      }else{
          isUniq = true;
      }
  }
  return newArr;
}
console.log(uniq([1, 2, 2, 3, 4, 4, 4, 4])); // 输出 [1,2,3,4]
console.log(uniq([1, 2, 'M', 'e', 'r', 'r', 'y'])); // 输出 [1,2,'M','e','r','y']
// 题 8: 将数组内容乱序
function random(arr) {
  return arr.sort(function () {
     return (Math.random()>0.5?-1:1);
  })
}
console.log(random([1, 2, 3, 4])); // 输出的可能是 [1,2,3,4] 或 [1,3,4,2] 或 [3,4,1,2] 等等随机可能
